home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / thesource-7.lha / Source / Articles / Stereoscopic / SegaGlasses.lha / SegaGlasses / add.c next >
C/C++ Source or Header  |  1992-07-15  |  4KB  |  144 lines

  1. #include <stdio.h>
  2. #include <alloc.h>
  3.  
  4. typedef struct { unsigned char r,
  5.                                g,
  6.                                b;
  7.                } Palette[256];
  8.  
  9. typedef struct { unsigned int  Width,
  10.                                Height;
  11.                  unsigned char ColInfo,
  12.                                BackGround,
  13.                                PixelAspect;
  14.                } GIFDesc;
  15.  
  16. typedef struct { unsigned char Separator;
  17.                  unsigned int  Left,
  18.                                Top,
  19.                                Width,
  20.                                Height;
  21.                  unsigned char Info;
  22.                } ImageDesc;
  23.  
  24. void main(int argc, char * argv[])
  25. {
  26.     FILE *i, *o;
  27.     char *image;
  28.     char gifsig[6], *GIFSIG = "GIF";
  29.     GIFDesc gd;
  30.     ImageDesc id;
  31.     Palette pal;
  32.     long cp, len;
  33.     int bpp, colors;
  34.  
  35.     /* Open the left GIF image file */
  36.  
  37.     if ((i = fopen(argv[1], "rb")) == NULL)
  38.     {
  39.         printf("Unable to open input file %s.\n", argv[1]);
  40.         exit(-1);
  41.     }
  42.  
  43.     if ((o = fopen(argv[3], "wb")) == NULL)
  44.     {
  45.         printf("Unable to open input file %s.\n", argv[3]);
  46.         exit(-1);
  47.     }
  48.  
  49.     /* Read in left file */
  50.  
  51.     fread(&gifsig, sizeof(gifsig), 1, i); /* Read in the signature "GIFxxx" */
  52.  
  53.     if (strncmp(gifsig, GIFSIG, 3) != 0)
  54.     {
  55.         printf("%s is not a .gif file.\n", argv[1]);
  56.         exit(-1);
  57.     }
  58.  
  59.     fread(&gd, sizeof(gd), 1, i);   /* Read in the GIF(screen) descriptor */
  60.  
  61.     bpp = (gd.ColInfo & 0x07) + 1;  /* Calculate the size of the color map */
  62.     colors = 1 << bpp;
  63.  
  64.     fread(&pal, colors, 3, i);      /* Read in the palette */
  65.  
  66.     fread(&id, sizeof(id), 1, i);   /* Read in the image dascriptor */
  67.  
  68.     cp = ftell(i);                  /* Save the current position in the file */
  69.     fseek(i, 0L, SEEK_END);         /* Seek to the end of the file */
  70.     len = ftell(i) - cp;            /* Calculate te length of the LZW */
  71.                                     /* encoded image */
  72.     fseek(i, cp, SEEK_SET);         /* Seek to where we were */
  73.  
  74.     image = malloc(len - 1);        /* Allocate memory for the data */
  75.     fread(image, len - 1, 1, i);    /* Read in the data, both minus the */
  76.                                     /* ';' file terminator */
  77.  
  78.     close(i);                       /* Close the input file */
  79.  
  80.     /* Write out sig, headers and palette of left file */
  81.  
  82.     fwrite("GIF89a", 6, 1, o);
  83.     fwrite(&gd, sizeof(gd), 1, o);
  84.     fwrite(&pal, 768, 1, o);
  85.     fwrite(&id, sizeof(id), 1, o);
  86.  
  87.     /* Write out left image */
  88.  
  89.     fwrite(image, len - 1, 1, o);
  90.     free(image);                        /* and free the memory */
  91.  
  92.     /* Open the right GIF image file */
  93.  
  94.     if ((i = fopen(argv[2], "rb")) == NULL)
  95.     {
  96.         printf("Unable to open input file %s.\n", argv[2]);
  97.         exit(-1);
  98.     }
  99.  
  100.     /* Read in right file */
  101.  
  102.     fread(&gifsig, sizeof(gifsig), 1, i);
  103.  
  104.     if (strncmp(gifsig, GIFSIG, 3) != 0)
  105.     {
  106.         printf("%s is not a .gif file.\n", argv[2]);
  107.         exit(-1);
  108.     }
  109.  
  110.     fread(&gd, sizeof(gd), 1, i);   /* Read in the GIF(screen) descriptor */
  111.  
  112.     bpp = (gd.ColInfo & 0x07) + 1;  /* Calculate the size of the color map */
  113.     colors = 1 << bpp;
  114.  
  115.     fread(&pal, colors, 3, i);      /* Read in the palette */
  116.  
  117.     fread(&id, sizeof(id), 1, i);   /* Read in the image dascriptor */
  118.  
  119.     cp = ftell(i);                  /* Save the current position in the file */
  120.     fseek(i, 0L, SEEK_END);         /* Seek to the end of the file */
  121.     len = ftell(i) - cp;            /* Calculate te length of the LZW */
  122.                                     /* encoded image */
  123.     fseek(i, cp, SEEK_SET);         /* Seek to where we were */
  124.  
  125.     image = malloc(len);            /* Allocate memory for the data */
  126.     fread(image, len, 1, i);        /* Read in the data, both minus the */
  127.                                     /* ';' file terminator */
  128.  
  129.     close(i);                       /* Close the input file */
  130.  
  131.     /* Write out header of right file*/
  132.  
  133.     fwrite(&id, 10, 1, o);
  134.  
  135.     /* Write out right image */
  136.  
  137.     fwrite(image, len, 1, o);
  138.     free(image);                   /* and free the memory */
  139.  
  140.     close(o);                      /* Close the output file */
  141. }
  142.  
  143.  
  144.